package com.ruoyi.veterinary.service;

import java.util.List;
import java.util.Map;
import com.ruoyi.veterinary.domain.VetBill;

/**
 * 账单管理Service接口
 * 
 * @author ruoyi
 * @date 2024-01-19
 */
public interface IVetBillService 
{
    /**
     * 查询账单管理
     * 
     * @param billId 账单管理主键
     * @return 账单管理
     */
    public VetBill selectVetBillByBillId(Long billId);

    /**
     * 查询账单管理列表
     * 
     * @param vetBill 账单管理
     * @return 账单管理集合
     */
    public List<VetBill> selectVetBillList(VetBill vetBill);

    /**
     * 新增账单管理
     * 
     * @param vetBill 账单管理
     * @return 结果
     */
    public int insertVetBill(VetBill vetBill);

    /**
     * 修改账单管理
     * 
     * @param vetBill 账单管理
     * @return 结果
     */
    public int updateVetBill(VetBill vetBill);

    /**
     * 批量删除账单管理
     * 
     * @param billIds 需要删除的账单管理主键集合
     * @return 结果
     */
    public int deleteVetBillByBillIds(Long[] billIds);

    /**
     * 删除账单管理信息
     * 
     * @param billId 账单管理主键
     * @return 结果
     */
    public int deleteVetBillByBillId(Long billId);

    /**
     * 查询累计未支付账单列表
     * 
     * @return 累计未支付账单集合
     */
    public List<VetBill> selectUnpaidBillList();

    /**
     * 根据客户ID和时间范围查询账单
     * 
     * @param customerId 客户ID
     * @param billPeriodStart 账单周期开始日期
     * @param billPeriodEnd 账单周期结束日期
     * @return 账单信息
     */
    public VetBill selectBillByCustomerAndPeriod(Long customerId, java.util.Date billPeriodStart, java.util.Date billPeriodEnd);

    /**
     * 生成账单编号
     * 
     * @return 账单编号
     */
    public String generateBillNo();

    /**
     * 查询账单统计信息
     * 
     * @return 统计信息
     */
    public Map<String, Object> selectBillStatistics();

    /**
     * 生成客户账单
     * 
     * @param customerId 客户ID
     * @param billPeriodStart 账单周期开始日期
     * @param billPeriodEnd 账单周期结束日期
     * @return 结果
     */
    public int generateCustomerBill(Long customerId, java.util.Date billPeriodStart, java.util.Date billPeriodEnd);

    /**
     * 更新账单支付状态
     * 
     * @param billId 账单ID
     * @param paidAmount 支付金额
     * @return 结果
     */
    public int updatePaymentStatus(Long billId, java.math.BigDecimal paidAmount);
}